package com.xt.purchasingsystem.mapper;

import com.xt.purchasingsystem.dto.DFileDto;
import com.xt.purchasingsystem.model.DFile;
import com.xt.purchasingsystem.model.SCell;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface DFileMapper {
    /**
     * 多条件查询未删除的产品档案的总数方法
     *
     * @param dfileDto
     * @return
     */
    int queryRowCountByHaveDelAndDto(DFileDto dfileDto);

    /**
     * 多条件查询未删除的产品档案的方法
     *
     * @param dfileDto
     * @return
     */
    List<DFile> queryDfileByHaveDelAndDto(DFileDto dfileDto);

    /**
     * 多条件查询已删除的产品档案的总数方法
     *
     * @param dfileDto
     * @return
     */
    int queryRowCountByDelRecoveryAndDto(DFileDto dfileDto);

    /**
     * 多条件查询已删除的产品档案的方法
     *
     * @param dfileDto
     * @return
     */
    List<DFile> queryDfileByDelRecoveryAndDto(DFileDto dfileDto);

    /**
     * 删除产品档案的方法
     *
     * @param id
     * @return
     */
    int deleteDFileById(Integer id);

    /**
     * 恢复产品档案的方法
     *
     * @param id
     * @return
     */
    int recoverDFileById(Integer id);

    /**
     * 永久删除产品档案的方法
     *
     * @param id
     * @return
     */
    int deleteByPrimaryKey(Integer id);

    /**
     * 添加产品档案的方法
     *
     * @param record
     * @return
     */
    int insert(DFile record);

    int insertSelective(DFile record);

    DFile selectByPrimaryKey(Integer id);

    /**
     * 根据产品编号查询此产品
     *
     * @param productId
     * @return
     */
    DFile getByProductId(@Param("productId") String productId);

    int updateByPrimaryKeySelective(DFile record);

    int updateByPrimaryKey(DFile record);

    /**
     * 根据产品编号修改库存分配标志
     *
     * @param dFile 产品档案对象
     * @return
     */
    int updateDesignCellTagByProductId(DFile dFile);

    /**
     * 根据id查
     *
     * @param id
     * @return
     */
    DFile selectByid(Integer id);

    /**
     * 查询所有产品总数
     *
     * @param dfileDto
     * @return
     */
    int queryRowCountByAllDfile(DFileDto dfileDto);

    /**
     * 查询所有产品档案
     *
     * @param
     * @return
     */
    List<DFile> getAllDfile(DFileDto dfileDto);

    /**
     * 审核通过的方法
     *
     * @param productId
     * @return
     */
    int updateCheckTag(String productId);

    /**
     * 审核未通过的方法
     *
     * @param productId
     * @return
     */
    int updateCheckTagNo(String productId);

    /**
     * 多条件查询可以制定物料组成设计单的产品档案总数
     *
     * @param dFileDto
     * @return
     */
    int rowCountByFormulateMaterialCompos(DFileDto dFileDto);

    /**
     * 多条件查询可以制定物料组成设计单的产品档案
     *
     * @param dFileDto
     * @return
     */
    List<DFile> queryDFileByFormulateMaterialCompos(DFileDto dFileDto);

    /**
     * 多条件查询可用物料的总数
     *
     * @param dFileDto
     * @return
     */
    int rowCountByAvailableMaterial(DFileDto dFileDto);

    /**
     * 多条件查询可用物料的集合
     *
     * @param dFileDto
     * @return
     */
    List<DFile> queryDFileByAvailableMaterial(DFileDto dFileDto);

    /**
     * 设计产品档案的物料组成标志的方法
     *
     * @param id
     * @return
     */
    int designDFileById(String id);

    /**
     * 设计产品档案的工序组成标志的方法
     *
     * @param id
     * @return
     */
    int designDFileProcedureTagById(String id);

    /**
     * 多条件查询可制定产品生产工序设计单的产品的总数
     *
     * @param dFileDto
     * @return
     */
    int rowCountByMaterialCompositionCompleted(DFileDto dFileDto);

    /**
     * 多条件查询可制定产品生产工序设计单的产品的集合
     *
     * @param dFileDto
     * @return
     */
    List<DFile> queryDFileByMaterialCompositionCompleted(DFileDto dFileDto);

    /**
     * 多条件查询未分配库存的产品档案的总数
     *
     * @param dFileDto
     * @return
     */
    int rowCountByUnallocatedInventory(DFileDto dFileDto);

    /**
     * 多条件分页查询未分配库存的产品档案的集合
     *
     * @param dFileDto
     * @return
     */
    List<DFile> queryDFileByUnallocatedInventory(DFileDto dFileDto);

    /**
     * 多条件查询可以生产计划登记的产品档案的总数
     *
     * @return
     */
    int rowCountByPlanRegister(DFileDto dFileDto);

    /**
     * 多条件分页查询可以生产计划登记的产品档案的总数
     *
     * @param dFileDto
     * @return
     */
    List<DFile> queryDFileByPlanRegister(DFileDto dFileDto);

    /**
     * 多条件查询可以入库的产品档案的总数
     *
     * @return
     */
    int rowCountByStorage(DFileDto dFileDto);

    /**
     * 多条件分页查询可以入库的产品档案的总数
     *
     * @param dFileDto
     * @return
     */
    List<DFile> queryDFileByStorage(DFileDto dFileDto);


    DFile queryDFileByProductName(@Param("productName") String productName);

    /**
     * 多条件分页查询可以 出入库的产品档案的总数
     *
     * @param dFileDto
     * @return
     */
    List<DFile> getAllWarehousingDfileByDto(DFileDto dFileDto);


    /**
     * 查询以审核通过的库存
     */
    List<DFile> selectallfile(DFileDto dFileDto);

    /**
     * 多条件查询所有未删除已审核是物料的产品档案
     * @param dFileDto
     * @return
     */
    List<DFile> getAllDFileIsMaterial(DFileDto dFileDto);

    /**
     * 根据供应商多条件查询此供应商所有未报价的物料
     * @param dFileDto
     * @return
     */
    List<DFile> getAllNoQuotationBySupplierId(DFileDto dFileDto);
}